//关于运算符重载方法一：
//首先 把返回值类型声明为该类型的引用，返回值为*this《这样才能实现s=s1=s2》
//2. 把传入的类型声明为const 避免实参到形参的拷贝构造，也不会更改实例的值
//3.再分配新内存之前释放自身内存
//4.判断当前实例和传入参数是否相同
CMyString& CMyString:: operator=(const CMyString& str) {
    if (this != &str)
    {
        delete[]m_pData;
        m_pData = nullptr;
        m_pData = new char[strlen(str.m_pData) + 1];
        strcpy(m_pData, str.m_pData);
    }
    return *this;
}
//优化
//上面函数 在分配内存之前delete，有可能会引发 new char 异常，导致内存崩溃
//解决思路
//方法1.先new 在delete 
//方法2.创建一个临时实例，在交换临时和原来的实例
CMyString& CMyString::operator=(const CMyString& str)
{
    if (this != &str)
    {
        CMyString strT(str);
        char* pTemp = strT.m_pData;
        strT.m_pData = m_pData;
        m_pData = pTemp;
    }
    return *this;
}